<?php
/**
 *  Класс WebUser
 *
 * @package WebUser
 */
class WebUser extends CWebUser
{
    /**
     * Данный метод срабатывает после успешного входа пользователя в свою уч. запись.
     *
     * В таблицу и колонку users(login_time) записываются текущая дата и время.
     * В таблицу и колонку users(last_login_time) записываются дата и время
     *  последнего входа взятая из users(login_time),т.к она уже устареля.
     *
     * @param $fromCookie boolean Вход с кукисами
     * @return
     */
    protected function afterLogin($fromCookie = true)
    {
        $timestamp = time();
        $date = date('Y-m-d H:i:s',$timestamp);
        $id = Yii::app()->user->id;

        $conn = Yii::app()->db;
        $s = 'SELECT login_time,last_login_time FROM tbl_users WHERE id=:id';
        $command = $conn->createCommand($s);
        $command->bindParam(':id',$id,PDO::PARAM_STR);
        $result = $command->query();
            foreach($result as $r){

                //Преобразуем $first && $last в timestamp для сравнения
                $first = strtotime($r['login_time']);
                $last = strtotime($r['last_login_time']);

                //Если $first && $last NOT NULL,значит есть дата и время
                if($first && $last)
                {
                    //Если login_time больше чем last_login_time, то в login_time добавляем текущюю дату и время, а last_login_time, вставляем login_time
                    if($first > $last && $first < $timestamp)
                    {
                        $connection =Yii::app()->db;
                        $sql = 'UPDATE tbl_users SET login_time=:timestamp,last_login_time=:last WHERE id=:id';
                        $comm = $connection->createCommand($sql);
                        $comm->bindParam(':timestamp',$date,PDO::PARAM_STR);
                        $comm->bindParam(':last',$r['login_time'],PDO::PARAM_STR);
                        $comm->bindParam(':id',$id,PDO::PARAM_STR);
                        $comm->execute();
                    }
                    //Если вход производится второй раз,то дата и время одинаковые, обновляем только колонку login_time
                    elseif($first === $last && $first < $timestamp)
                    {
                        $connection =Yii::app()->db;
                        $sql = 'UPDATE tbl_users SET login_time=:time WHERE id=:id';
                        $comm = $connection->createCommand($sql);
                        $comm->bindParam(':time',$date,PDO::PARAM_STR);
                        $comm->bindParam(':id',$id,PDO::PARAM_STR);
                        $comm->execute();

                    }
                }
                //Если вход производится впервые, ставим дату и время одинаковыми
                elseif($r['login_time'] === NULL && $r['last_login_time'] === NULL)
                {
                    $connection =Yii::app()->db;
                    $sql = 'UPDATE tbl_users SET login_time=:timestamp,last_login_time=:timestamp WHERE id=:id';
                    $comm = $connection->createCommand($sql);
                    $comm->bindParam(':timestamp',$date,PDO::PARAM_STR);
                    $comm->bindParam(':id',$id,PDO::PARAM_STR);
                    $comm->execute();
                }
            }
    unset($timestamp,$date,$id);
    }
}